﻿using System.Collections.Generic;
using Neturion.Dados;
using Neturion.IRepositorios;
using Neturion.Repositorios;
using Neturion.Utils;

namespace Neturion.Negocios
{
    /// <summary>
    /// 
    /// </summary>
    public class NegocioProcedimento
    {
        private IRepositorioProcedimento _repositorioProcedimento;

        /// <summary>
        /// 
        /// </summary>
        public NegocioProcedimento()
        {
            _repositorioProcedimento = new RepositorioProcedimento();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="procedimento"></param>
        /// <returns></returns>
        public Procedimento Inserir(Procedimento procedimento)
        {
            procedimento.Codigo = GeradorCodigo.GerarCodigo(1);
            procedimento.Codigo += (_repositorioProcedimento.ObterUltimoIdCodigoInteiro() + 1).ToString();
            procedimento.Codigo += GeradorCodigo.GerarCodigo(1, procedimento.Codigo);
            return _repositorioProcedimento.Inserir(procedimento);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="procedimento"></param>
        /// <returns></returns>
        public Procedimento Atualizar(Procedimento procedimento)
        {
            return _repositorioProcedimento.Atualizar(procedimento);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="procedimento"></param>
        public void Excluir(Procedimento procedimento)
        {
            Procedimento procedimentoTmp = ObterPorId(procedimento.ProcedimentoId);
            _repositorioProcedimento.Excluir(procedimentoTmp);
        }
        
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public IList<Procedimento> ObterTodos()
        {
            return _repositorioProcedimento.ObterTodos();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Procedimento ObterPorId(int id)
        {
            return _repositorioProcedimento.ObterPorId(id);
        }

        public Procedimento ObterPorCodigo(Usuario usuarioPermissao, string codigo)
        {
            return _repositorioProcedimento.ObterPorCodigo(codigo);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="inicio"></param>
        /// <param name="quantidade"></param>
        /// <param name="quantidadeMinima"></param>
        /// <param name="usuarioPermissao"></param>
        /// <param name="codigo"></param>
        /// <param name="descricao"></param>
        /// <returns></returns>
        public IList<Procedimento> ObterTodos(int inicio, int quantidade, int quantidadeMinima, Usuario usuarioPermissao, string codigo, string descricao)
        {
            return _repositorioProcedimento.ObterTodos(inicio, quantidade, quantidadeMinima, codigo, descricao);
        }
    }
}